$(document).ready(function() {
    // Monta a consulta de acordo com a navegação do usuário.
    function loadQuery() {
        $.ajax({
            type: "GET",
            url: "assembles-query",
            data: {
                "domainOntology": $("input[name=addressDom]").val(),
                mapKey: jsonTextQuery,
                mapVal: jsonTextOptional
            },
            error: function() {
                console.log("ERRO MENU");
            },
            success: function(responseText) {
                $("textarea[id=assembleQuery]").text(responseText);
            }
        });
    }

    // Pega as classes e data properties que serão incluidos na clausula OPTIONAL da query.
    var keyOpt,
            valueOpt,
            jsonTextOptional;
    function addOptionalQuery(keyOpt, valueOpt) {
        $(".conteudoMenu_modal a").click(function() {
            keyOpt = $(this).parent(".conteudoMenu_modal").parent("li").find(".itemMenu_modal").attr("id");
            valueOpt = $(this).attr("id");

            jsonTextQuery = JSON.stringify(generatingArrayQuery(keyOpt, valueOpt));
            jsonTextOptional = JSON.stringify(generatingArrayOptional(keyOpt, valueOpt));
        });
        return jsonTextOptional;
    }

    // Pega as classes e data properties que serão incluidos na query.
    var jsonTextQuery;
    $(".conteudoMenu a").click(function() {
        var key = $(this).parent(".conteudoMenu").parent("li").find(".itemMenu").attr("id");
        var value = $(this).attr("id");

        jsonTextQuery = JSON.stringify(generatingArrayQuery(key, value));
        addOptionalQuery(keyOpt, valueOpt);
        loadQuery();
        //jsonString = $.toJSON(mapList);
    });

    // Verifica qual checkbox foi selecionado e a partir disso verifica que ação deve tomar para 'Close' e 'Confirm'.
    $('.dialog_chk').click(function() {
        var id = $(this).attr('rel');
        var rel = id.split("_");

        if (rel[1] === 'optional' || rel[1] === 'filter') {
            $('#btn_confirm_' + rel[1]).click(function() {
                loadQuery();
            });

            $('#btn_close_' + rel[1] + ', .close-' + rel[1]).click(function() {

            });
        }
    });

    // Adiciona os dados ao Array() no qual serão utilizados para construir a query.
    var mapKeysQuery = new Object(),
            mapValuesQuery = new Array();
    function generatingArrayQuery(key, value) {
        if (mapKeysQuery[key] && $.inArray(value, mapKeysQuery[key]) === -1 || mapKeysQuery[key] && $.inArray(value, mapKeysQuery[key]) !== -1) {
            // Verifica se já existe a chave vinda do "key" e se o valor de "value" está presente no array.
            if (mapKeysQuery[key].indexOf(value) === -1) {
                mapKeysQuery[key].push(value);
            }
        }
        else {
            // Cria o array de acordo com o valor da "key" e adiciona o valor de "value".
            mapKeysQuery[key] = new Object();
            mapValuesQuery = new Array();
            mapValuesQuery.push(value);
            mapKeysQuery[key] = mapValuesQuery;
        }
        return mapKeysQuery;
    }

    // Adiciona ao Array() os dados do OPTIONAL no qual serão utilizados para construir a query.
    var mapKeysOptional = new Object(),
            mapValuesOptional = new Array();
    function generatingArrayOptional(key, value) {
        if (mapKeysOptional[key] && $.inArray(value, mapKeysOptional[key]) === -1 || mapKeysOptional[key] && $.inArray(value, mapKeysOptional[key]) !== -1) {
            // Verifica se já existe a chave vinda do "key" e se o valor de "value" está presente no array.
            if (mapKeysOptional[key].indexOf(value) === -1) {
                mapKeysOptional[key].push(value);
            }
        }
        else {
            // Cria o array de acordo com o valor da "key" e adiciona o valor de "value".
            mapKeysOptional[key] = new Object();
            mapValuesOptional = new Array();
            mapValuesOptional.push(value);
            mapKeysOptional[key] = mapValuesOptional;
        }
        return mapKeysOptional;
    }

});
